package DigitalNetwork;

import java.util.ArrayList;

/**
 * Jelforras, melynek erteket a felhasznalo valtogathatja.
 * <p>
 *
 * </p>
 *
 * @author Ableda Peter
 * @author Andrasi Istvan
 * @author Kamaras Karoly
 * @author Pora Szilard
 *
 * @version 1.0 Build 2011.04.17.
 */
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public class Button extends Source {

	/** A gomb allapota. Igaz, ha a gomb be van nyomva, egyebkent hamis. */
	private boolean isHigh;

	/** [Konstruktor]
	 * Letrehozza az outputs listat.
     *
     * @param _ID A gomb neve.
     * @param x Az elem poziciojanak vizszintes komponense.
     * @param y Az elem poziciojanak fuggoleges komponense.
	 */
	//==========================================================================
	public Button(String _ID, int x, int y) {
        super(x,y);
		// Beallitjuk az ID-t.
		this.ID = _ID;

		// Letrehozzuk a kimeneti portok listajat.
		this.outputs = new ArrayList<PortOut>();
		// Letrehozzuk a kimenetet.
		this.outputs.add(new PortOut(this.ID + "_o0", this));

		// Inicializaljuk az allapotat.
		this.isHigh = true;

		// Ertesitunk.
		Main.printMessage("#" + this.getID() + " Button bemenet letrehozva");
	}
	//==========================================================================

	/**
	 * Vissza adja az adott elem tipusat.
     *
	 * @return String Az elem tipusa.
	 */
	@Override
	//==========================================================================
	public String getType() {
		return "Button";
	}
	//==========================================================================

	/**
     * Vissza adja az elem ID-jet es belso allapotat.
	 * 
	 * @return String
	 */
	@Override
	//==========================================================================
	public String print() {
		return "#" + this.ID + " Button - " + (this.isHigh ? "1" : "0");
	}
	//==========================================================================

	/**
	 * Frissiti a kimenetet.
	 *
	 */
	@Override
	//==========================================================================
	public void updateOutput() {
		// Frissitjuk a kimenetet az aktualis allapot szerint.
		this.outputs.get(0).setState(this.isHigh);
	}
	//==========================================================================

	/**
	 * Felhasznalo gomb lenyomasanak a kezelese.
	 *
     * @param high A felhasznalo altal beallitott allapot.
	 */
	//==========================================================================
	public void press(boolean high) {
		// Beallitjuk a megadott ertekre.
		this.isHigh = high;
	}
	//==========================================================================

    /**
     * Vissza adja belso allapotat.
	 *
	 * @return String
	 */
	//==========================================================================
	public boolean getIsHigh() {
		return this.isHigh;
	}
	//==========================================================================
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

